package ln.service;

import org.apache.maven.plugin.logging.*;

import java.io.*;

/**
 * 文件行数统计器的实现类
 */
public class LineEvaluator {
    /**
     * 由Mojo类注入的Maven日志打印器
     */
    private final Log log;

    public LineEvaluator(Log log) {
        this.log = log;
    }

    /**
     * 统计主方法
     * 递归读取当前文件与子文件的行数
     * 直接跳到文件尾读取行号，即为文件的总行数
     *
     * @param currentFile
     */
    public void evaluate(File currentFile) {
        if (currentFile.isFile()) {
            try (LineNumberReader lineNumberReader = new LineNumberReader(new InputStreamReader(new FileInputStream(currentFile)))) {
                lineNumberReader.skip(currentFile.length());
                log.info(String.format("[%06d] %s", lineNumberReader.getLineNumber() + 1, currentFile.getAbsolutePath()));
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        } else if (currentFile.isDirectory()) {
            File[] subFiles = currentFile.listFiles();
            if (subFiles == null) {
                return;
            }
            for (File subFile : subFiles) {
                evaluate(subFile);
            }
        }
    }
}
